﻿/*
 *  ============================================================================
 *  Name:           Gestão de parques de estacionamento
 *  Author:         João Faria
 *  Email:          a8836@alunos.ipca.pt
 *                  jfaria.gmr@gmail.com
 *  Version:        0
 *  Date:           2013-04-10
 *  Copyright:       
 *  Description:    IPCA - Programação II
 *                  Projecto final
 *  ============================================================================
 */
using System;
using System.Windows.Forms;
using GesParking.BusinessLayer;
using System.Collections.Generic;
using GesParking.BusinessObjects;

namespace GesParking
{
    /// <summary>
    /// Classe que gere os estacionamentos
    /// </summary>
    class ParkingRegistryPL
    {
        ParkingRegistryBL registos = new ParkingRegistryBL(); ///Esta iniciação de parques deveria ser feita no main do form que faz a gestão de parques


        #region Metodos parking

        /// <summary>
        /// Regista um novo estacionamento
        /// </summary>
        /// <param name="parkId">Id do parque</param>
        /// <param name="userId"> Id do user</param>
        public void ParkIn(Guid parkId, Guid userId)
        {
            try
            {
                registos.ParkIn(userId, parkId);
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Regista um novo estacionamento
        /// </summary>
        /// <param name="parkId">Id do parque</param>
        /// <param name="userId"> Id do user</param>
        public void ParkOut(Guid parkId, Guid userId)
        {
            try
            {
                registos.ParkOut(userId, parkId);
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListParkings()
        {
            return registos.ListParkingsBL();
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListParkings(Guid id)
        {
            return registos.ListParkingsBL(ParksBL.Get(id));
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListParkings(DateTime min, DateTime max)
        {
            return registos.ListParkingsBL(min, max);
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListParkings(DateTime min, DateTime max, Guid id)
        {
            return registos.ListParkingsBL(min, max, ParksBL.Get(id));
        }

        #endregion

        #region Metodos history

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListHistory()
        {
            return registos.ListHistoryBL();
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListHistoryByPark(Guid id)
        {
            return registos.ListHistoryBL(ParksBL.Get(id));
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListHistoryByUser(Guid id)
        {
            return registos.ListHistoryBL(UsersBL.Get(id));
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListHistory(DateTime min, DateTime max)
        {
            return registos.ListHistoryBL(min, max);
        }

        /// <summary>
        /// Lista todos os registo de estacionamento
        /// </summary>
        /// <returns>Lista de registos</returns>
        public List<ParkingRegistryBO> ListHistory(DateTime min, DateTime max, Guid id)
        {
            return registos.ListHistoryBL(min, max, ParksBL.Get(id));
        }

        /// <summary>
        /// Grava os dados
        /// </summary>
        public void Save()
        {
            registos.SaveHistory();
            registos.SaveParkings();
        }

        #endregion
    }
}
